歡迎來到 偉大的轉移。在中央處理器(CPU)程式設計中,我們定義 如何 進行迭代;而在通用圖形處理單元(GPGPU)中,我們定義 什麼 一次迭代的樣貌。這種從以指令為中心轉向以資料為中心的邏輯轉變,是由 核心抽象所驅動。
1. __global__ 的藍圖
透過使用 __global__ 修飾符,你並非撰寫一個函數——你是在設計一個 可擴展的藍圖。單一的核心執行代表一個獨立的工作單元,讓顯示處理器(GPU)能在其龐大的核心數量下,無需手動管理線程,便能協調成千上萬個相同任務。
2. 全域位址解析器
在百萬個線程中,單一線程如何找到目標?它使用一種稱為索引公式的確定性契約:
$$\text{threadID} = \text{blockIdx.x} \times \text{blockDim.x} + \text{threadIdx.x}$$
此公式如同一個座標系統,將軟體的邏輯資料(陣列)與硬體的物理階層(區塊與線程)連結起來。
3. 執行設定
這些 <<<B, T>>> 參數定義了網格形狀。這確保了 透明可擴展性:無論硬體擁有 2 個流式多處理器(SM)或 80 個,你的程式碼都能執行相同的邏輯。
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>